package rmi;

import java.awt.Color;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;


import logica.datatypes.Jugador.DataJugador_R1;
import logica.datatypes.Jugador.DataJugador_R17;
import logica.datatypes.Jugador.DataJugador_R5;
import logica.datatypes.Partida.DataPartida_R1;
import logica.datatypes.Partida.DataPartida_R16;
import logica.datatypes.Partida.DataPartida_R4;
import logica.excepciones.JugadoresException;
import logica.excepciones.PartidaException;
import logica.fachadas.Fabrica;
import logica.fachadas.IFabrica;
import logica.fachadas.FachadaModerador;
import logica.fachadas.IFachadaJugadores;
import logica.fachadas.IFachadaModerador;
import logica.fachadas.IFachadaPublico;

import persistencia.Config;
import persistencia.PersistenciaException;
import persistencia.Archivo;


public class PruebaRmi {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub


		try {
				
			String servidor = Config.getInstancia().getArchivoConf("Servidor");
			int puerto =  Integer.parseInt(Config.getInstancia().getArchivoConf("Puerto")); 

			IFabrica fabrica = (IFabrica)Naming.lookup("//" + servidor +":" + puerto + "/fabrica");
			
			IFachadaModerador fachadaModerador = fabrica.getFachadaModerador();
			IFachadaJugadores fachadaJugadores = fabrica.getFachadaJugador();
			IFachadaPublico fachadaPublico = fabrica.getFachadaPublico();

			System.out.println("Servidor Accedido");
			
			System.out.println("\n\nPruebas Moderador:");
			

			Color color= Color.WHITE;
			DataJugador_R1 dataJugador_R1 = new DataJugador_R1("Jose",color);
			color= Color.BLACK;
			DataJugador_R1 dataJugador_R2 = new DataJugador_R1("Pedro",color);
			color= Color.BLUE;
			DataJugador_R1 dataJugador_R3 = new DataJugador_R1("Maria",color);
			
			DataJugador_R1[] dataJugadores = new DataJugador_R1[3];
			dataJugadores[0] = dataJugador_R1;
			dataJugadores[1] = dataJugador_R2;
			dataJugadores[2] = dataJugador_R3;
			
			DataPartida_R1 dataPartida_R1 = new DataPartida_R1("Partida1", dataJugadores) ;
			DataPartida_R1 dataPartida_R2 = new DataPartida_R1("Partida2", dataJugadores) ;
			DataPartida_R1 dataPartida_R3 = new DataPartida_R1("Partida3", dataJugadores) ;
	
			fachadaModerador.crearNuevaPartida(dataPartida_R1);
			fachadaModerador.crearNuevaPartida(dataPartida_R2);
			fachadaModerador.crearNuevaPartida(dataPartida_R3);
			
			System.out.print("Partidas ingresadas\n");
			DataPartida_R4 dataPartida_R4[] = fachadaModerador.listarCodPartidas();
			DataJugador_R5[] dataJugador_R5;
			
			int cantPart = dataPartida_R4.length;
			
			for (int i=0; i<cantPart; i++){
				System.out.print("\nCodigo Partida: " + dataPartida_R4[i].getCodigo());
				dataJugador_R5 = fachadaModerador.listarNomJugadores("Partida1"); 
				
				System.out.print("\n                Nombre Jugadores: ");
				int cantJug = dataJugador_R5.length; 
				for (int c=0; c<cantJug; c++){
					System.out.print(dataJugador_R5[c].getNombre() + " ");		
				}
			}
			System.out.print("\n\n");
			
			//---------
			
			fachadaModerador.iniciarPartida("Partida1");  
			System.out.print("Se ha iniciado la partida con codigo: Partida1\n");
			fachadaModerador.detenerPartida("Partida1");
			System.out.print("Se ha detenido la partida con codigo: Partida1\n");
			fachadaModerador.iniciarPartida("Partida2");   
			System.out.print("Se ha iniciado la partida con codigo: Partida2\n");
			fachadaModerador.detenerPartida("Partida2");
			System.out.print("Se ha detenido la partida con codigo: Partida2\n");
			fachadaModerador.reanudarPartida("Partida2");
			System.out.print("Se ha reanudado la partida con codigo: Partida2\n");
			
			fachadaModerador.iniciarTurno("Partida2");
			
			System.out.print("\nSe ha iniciado turno de la Partida2\n");
			
			fachadaModerador.guardarCambios();
			System.out.print("\n\nSe han guardado los cambios del sistema\n");
			
			fachadaJugadores.loginJugador("Jose");
			
			//DataJugador_R11 dataJugador_R11[] = fachadaJugadores.viusalizarTablero();
/*
			System.out.print("\nSe han guardado los cambios del sistema\n");
			
			FachadaModerador prueba2 = new FachadaModerador();
			
			System.out.print("Partidas ingresadas\n");
			DataPartida_R4 dataPartida_R4_2[] = prueba2.listarCodPartidas();
			DataJugador_R5[] dataJugador_R5_2;
			
			int cantPart2 = dataPartida_R4_2.length;
			
			for (int i2=0; i2<cantPart2; i2++){
				System.out.print("\nCodigo Partida: " + dataPartida_R4_2[i2].getCodigo());
				dataJugador_R5_2 = prueba2.listarNomJugadores("Partida1"); 
				
				System.out.print("\n                Nombre Jugadores: ");
				int cantJug2 = dataJugador_R5_2.length; 
				for (int c2=0; c2<cantJug2; c2++){
					System.out.print(dataJugador_R5_2[c2].getNombre() + " ");		
				}
			}
			*/
////////////
			/*	
			Color color= Color.CYAN;
			DataJugador_R1 dataJugador_R1 = new DataJugador_R1("Juan",color);
			color= Color.GRAY;
			DataJugador_R1 dataJugador_R2 = new DataJugador_R1("Rosa",color);
			DataJugador_R1[] dataJugadores = new DataJugador_R1[2];
			dataJugadores[0] = dataJugador_R1;
			dataJugadores[1] = dataJugador_R2;
			DataPartida_R1 dataPartida_R1 = new DataPartida_R1("Partida1", dataJugadores) ;
			fachadaModerador.crearNuevaPartida(dataPartida_R1);
			
			System.out.print("Se ingreso Partida4, sus jugadores son:\n");
			DataPartida_R4 dataPartida_R4[] = fachadaModerador.listarCodPartidas();
			DataJugador_R5[] dataJugador_R5;
			/*
			int cantPart = dataPartida_R4.length;
			
			for (int i=0; i<cantPart; i++){
				System.out.print("\nCodigo Partida: " + dataPartida_R4[i].getCodigo());
				dataJugador_R5 = fachadaModerador.listarNomJugadores("Partida1"); 
				
				System.out.print("\n                Nombre Jugadores: ");
				int cantJug = dataJugador_R5.length; 
				for (int c=0; c<cantJug; c++){
					System.out.print(dataJugador_R5[c].getNombre() + ", ");		
				}
			}

			fachadaModerador.iniciarPartida("Partida1");  
			fachadaModerador.detenerPartida("Partida1");
			fachadaModerador.reanudarPartida("Partida1");
			
			fachadaModerador.iniciarTurno("Partida1");
			
			DataJugador_R11[] DataJugador_R11;
			DataJugador_R11 = fachadaJugadores.viusalizarTablero();

			int i=0;
			boolean encontre=false;
			while(!encontre){
				if(DataJugador_R11[i].getNombre()=="Juan"){
					DataPais_R11[] paises = DataJugador_R11[i].getPaisesAsignados();
					encontre=true;
				}
				i++;
			}
			


			DataPartida_R16[] dataPartida_R16 = fachadaPublico.listarPartidasRegistradas();
			
			int cantPart = dataPartida_R16.length;
			
			for (int c=0; c<cantPart; c++){
				System.out.print("\nCodigo Partida: " + dataPartida_R16[c].getCodigo());
			}
			
			DataJugador_R17[] dataJugador_R17 = fachadaPublico.listarJugadoresPartida("Partida1");
			
			cantPart = dataJugador_R17.length;
			System.out.print("\nJugadores de la Partida1");
			for (int d=0; d<cantPart; d++){
				System.out.print("\nNum Jugador: " + dataJugador_R17[d].getNumero());
			}
			
			fachadaModerador.guardarCambios();
			System.out.print("\n\nSe han guardado los cambios del sistema\n");
			
			*/
			//HACER PRUEBAS ++++++++++++++++++++++++++++++++++++
				
				
			} catch (MalformedURLException e) {
				e.printStackTrace();
			} catch (RemoteException e) {
				e.printStackTrace();
			} catch (NotBoundException e) {
				e.printStackTrace();
			} catch (PersistenciaException e) {
				e.printStackTrace();
			} catch (JugadoresException e) {
				System.out.print(e.darMensaje());
			} catch (PartidaException e) {
				System.out.print(e.darMensaje());
			}

	}

}
